Node.js ES6+ Features

আধুনিক জাভাস্ক্রিপ্ট বৈশিষ্ট্য ব্যবহার করে পরিষ্কার এবং শক্তিশালী কোড লিখতে শিখুন

ES6+ কি?

ES6 (ECMAScript 2015) এবং অন্যান্য সংস্করণগুলি জাভাস্ক্রিপ্টে শক্তিশালী নতুন বৈশিষ্ট্য যুক্ত করে যা আপনার কোডকে আরও স্বচ্ছ, সংক্ষিপ্ত এবং সুরক্ষিত করে।

Node.js JavaScript .

Node.js

সমস্ত আধুনিক Node.js সংস্করণে (10+) ES6+ বৈশিষ্ট্যগুলির জন্য আরও ভাল সমর্থন রয়েছে

নতুন বৈশিষ্ট্য

নতুন সংস্করণগুলি ES2020 এবং তার থেকে আরও সাম্প্রতিক জাভাস্ক্রিপ্ট সংযোজন সমর্থন করে৷

সুবিধা

এই আধুনিক জাভাস্ক্রিপ্ট বৈশিষ্ট্যগুলি আপনাকে সাহায্য করে:

let এবং const

let এবং const কীওয়ার্ডগুলি ভেরিয়েবল ঘোষণা করার পছন্দের উপায় হিসাবে var প্রতিস্থাপিত হয়েছে:

উদাহরণ: let এবং const

// Using let (can be changed)
let score = 10;
score = 20;
// Using const (cannot be reassigned)
const MAX_USERS = 100;

// Block scope with let
if (true) {
  let message = 'Hello';
  console.log(message); // Works here
}

তীর ফাংশন

তীর ফাংশন ফাংশন লেখার জন্য একটি সংক্ষিপ্ত সিনট্যাক্স প্রদান করে এবং এটিকে স্বয়ংক্রিয়ভাবে আবদ্ধ প্রেক্ষাপটে আবদ্ধ করে।

তীর ফাংশনের মূল সুবিধা:

উদাহরণ: তীর ক্রিয়াকলাপ

// Traditional function
function add(a, b) {
  return a + b;
}

// Arrow function (same as above)
const addArrow = (a, b) => a + b;

// Single parameter (no parentheses needed)
const double = num => num * 2;

// No parameters (parentheses needed)
const sayHello = () => 'Hello!';

// Using with array methods
const numbers = [1, 2, 3];
const doubled = numbers.map(num => num * 2);
console.log(doubled);

⚠️কখন তীর ফাংশন ব্যবহার করবেন না:

  • অবজেক্ট পদ্ধতি (যা অবশ্যই 'এই' অবজেক্টকে উল্লেখ করবে)
  • কনস্ট্রাক্টর ফাংশন ('নতুন' এর সাথে তীর ফাংশন ব্যবহার করা যাবে না)
  • ইভেন্ট হ্যান্ডলারদের অবশ্যই 'এই' উপাদানটি উল্লেখ করতে হবে

টেমপ্লেট আক্ষরিক

টেমপ্লেট লিটারাল (টেমপ্লেট স্ট্রিং) ব্যাকটিক্স (`) ব্যবহার করে এমবেডেড এক্সপ্রেশন সহ স্ট্রিং তৈরি করার একটি মার্জিত উপায় প্রদান করে।

টেমপ্লেট লিটারালের মূল বৈশিষ্ট্য:

উদাহরণ: টেমপ্লেট আক্ষরিক

// Basic string interpolation
const name = 'Alice';
console.log(`Hello, ${name}!`);

// Multi-line string
const message = `
  This is a multi-line
  string in JavaScript.
`;
console.log(message);

// Simple expression
const price = 10;
const tax = 0.2;
console.log(`Total: $${price * (1 + tax)}`);

ধ্বংস করা

ডিস্ট্রাকচারিং আপনাকে একটি সংক্ষিপ্ত সিনট্যাক্স সহ পৃথক ভেরিয়েবলে অবজেক্ট থেকে অ্যারে বা বৈশিষ্ট্য থেকে মান বের করতে দেয়।

ধ্বংসের মূল বৈশিষ্ট্য:

উদাহরণ: অবজেক্ট ডিস্ট্রাকচারিং

// Basic object destructuring
const user = { name: 'Alice', age: 30, location: 'New York' };
const { name, age } = user;
console.log(name, age);

উদাহরণ: অ্যারে ডেস্ট্রাকচারিং

// Basic array destructuring
const colors = ['red', 'green', 'blue'];
const [first, second, third] = colors;
console.log(first, second, third);

// Skipping elements
const [primary, , tertiary] = colors;
console.log(primary, tertiary);

স্প্রেড এবং বিশ্রাম অপারেটর

স্প্রেড এবং বিশ্রাম অপারেটর (উভয়ই ... হিসাবে লেখা) আপনাকে একাধিক উপাদানের সাথে দক্ষতার সাথে কাজ করার অনুমতি দেয়।

উদাহরণ: স্প্রেড অপারেটর

// Array spread - combining arrays
const numbers = [1, 2, 3];
const moreNumbers = [4, 5, 6];
const combined = [...numbers, ...moreNumbers];
console.log(combined);

// Array spread - converting string to array of characters
const chars = [...'hello'];
console.log(chars);

উদাহরণ: REST অপারেটর

// Rest parameter in functions
function sum(...numbers) {
  return numbers.reduce((total, num) => total + num, 0);
}
console.log(sum(1, 2, 3, 4, 5));

ডিফল্ট পরামিতি

ES6+ আপনাকে ফাংশন প্যারামিটারের জন্য ডিফল্ট মান নির্দিষ্ট করতে দেয়, অনেক ক্ষেত্রে ম্যানুয়াল প্যারামিটার যাচাইকরণের প্রয়োজনীয়তা দূর করে।

ডিফল্ট পরামিতিগুলির প্রধান সুবিধাগুলি হল:

উদাহরণ: ডিফল্ট পরামিতি

// Basic default parameter
function greet(name = 'Guest') {
  return `Hello, ${name}!`;
}

console.log(greet());
console.log(greet('Kai'));

ক্লাস

ES6 জাভাস্ক্রিপ্টে ক্লাস সিনট্যাক্স প্রবর্তন করেছে, যা অবজেক্ট তৈরি করতে এবং উত্তরাধিকার প্রয়োগ করার একটি পরিষ্কার এবং আরও সংক্ষিপ্ত উপায় প্রদান করে।

প্রযুক্তিগতভাবে, জাভাস্ক্রিপ্ট ক্লাসগুলি এখনও প্রোটোটাইপের উপর ভিত্তি করে।

জাভাস্ক্রিপ্ট ক্লাসের মূল বৈশিষ্ট্য:

উদাহরণ: ক্লাস বেসিক

// Simple class with constructor and method
class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  greet() {
    return `Hello, I'm ${this.name}!`;
  }
}

// Create an instance
const person = new Person('Alice', 25);
console.log(person.greet()); // Hello, I'm Alice!

উদাহরণ: ক্লাস ইনহেরিটেন্স

// Parent class
class Animal {
  constructor(name) {
    this.name = name;
  }

  speak() {
    return `${this.name} makes a sound.`;
  }
}

// Child class
class Dog extends Animal {
  speak() {
    return `${this.name} barks!`;
  }
}

const dog = new Dog('Rex');
console.log(dog.speak());

উদাহরণ: প্রাইভেট ক্লাস ফিল্ড (ES2022+)

// Class with private field (# prefix)
class Counter {
  #count = 0; // Private field

  increment() {
    this.#count++;
  }

  getCount() {
    return this.#count;
  }
}

const counter = new Counter();
counter.increment();
console.log(counter.getCount());
// console.log(counter.#count); // Error: Private field

প্রতিশ্রুতি এবং অ্যাসিঙ্ক/অপেক্ষা করুন

আধুনিক জাভাস্ক্রিপ্ট অ্যাসিঙ্ক্রোনাস ক্রিয়াকলাপগুলি পরিচালনা করার জন্য শক্তিশালী সরঞ্জাম সরবরাহ করে যা বিলম্ব, API কল বা I/O ক্রিয়াকলাপ জড়িত এমন কোডের সাথে কাজ করা আরও সহজ করে তোলে।

প্রতিশ্রুতি

প্রতিশ্রুতিগুলি সেই মানগুলিকে বোঝায় যা এখনও উপলব্ধ নয়।

তারা কলব্যাকের তুলনায় অ্যাসিঙ্ক্রোনাস ক্রিয়াকলাপগুলি পরিচালনা করার আরও মার্জিত উপায় সরবরাহ করে।

এই রাজ্যগুলির একটিতে একটি প্রতিশ্রুতি রয়েছে:

উদাহরণ: মৌলিক প্রতিশ্রুতি

// Creating a promise
const fetchData = () => {
  return new Promise((resolve, reject) => {
     // Simulating an API call
     setTimeout(() => {
       const data = { id: 1, name: 'Product' };
       const success = true;

       if (success) {
         resolve(data); // Fulfilled with data
       } else {
         reject(new Error('Failed to fetch data')); // Rejected with error
       }
     }, 1000);
  });
};

// Using a promise
console.log('Fetching data...');

fetchData()
  .then(data => {
    console.log('Data received:', data);
    return data.id; // Return value is passed to the next .then()
  })
  .then(id => {
    console.log('Processing ID:', id);
  })
  .catch(error => {
    console.error('Error:', error.message);
  })
  .finally(() => {
    console.log('Operation completed (success or failure)');
  });

console.log('Continuing execution while fetch happens in background');

Async/Await

Async/await (ES2017-এ প্রবর্তিত) প্রতিশ্রুতি দিয়ে কাজ করার জন্য, অ্যাসিঙ্ক্রোনাস কোডের চেহারা এবং সিঙ্ক্রোনাস কোডের মতো আচরণ করার জন্য একটি পরিষ্কার সিনট্যাক্স প্রদান করে।

উদাহরণ: Async/Await

// Function that returns a promise
const fetchUser = (id) => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      if (id > 0) {
        resolve({ id, name: `User ${id}` });
       } else {
        reject(new Error('Invalid user ID'));
       }
     }, 1000);
  });
};

// Using async/await
async function getUserData(id) {
  try {
    console.log('Fetching user...');
    const user = await fetchUser(id); // Waits for the promise to resolve
    console.log('User data:', user);

    // You can use the result directly
    return `${user.name}'s profile`;
  } catch (error) {
     // Handle errors with try/catch
     console.error('Error fetching user:', error.message);
     return 'Guest profile';
   }
}

// Async functions always return promises
console.log('Starting...');
getUserData(1)
  .then(result => console.log('Result:', result))
  .catch(error => console.error('Unexpected error:', error));
console.log('This runs before getUserData completes');

⚠️সাধারণ অ্যাসিঙ্ক/অপেক্ষার ভুলগুলি:

  • ভুলে যাওয়া যে Async ফাংশন সবসময় প্রতিশ্রুতি প্রদান করে
  • চেষ্টা/ক্যাচ সহ ত্রুটিগুলি পরিচালনা করতে ব্যর্থতা
  • ক্রমানুসারে ক্রিয়াকলাপ চালানো যখন সেগুলি সমান্তরালভাবে চালানো যায়
  • একটি Async ফাংশনের বাইরে await ব্যবহার করে
  • অ-প্রতিশ্রুতি মান আশা করা (অপ্রয়োজনীয় কিন্তু ক্ষতিকারক)

ES মডিউল

ES মডিউল (ESM) কোড সংগঠিত এবং ভাগ করার জন্য একটি প্রমিত উপায় প্রদান করে। এগুলি ES2015 এ চালু করা হয়েছিল এবং এখন Node.js-এ স্থানীয়ভাবে সমর্থিত।

ES মডিউলগুলির মূল সুবিধা:

উদাহরণ: ES মডিউল

File: math.js

// Named exports
export const PI = 3.14159;

export function add(a, b) {
  return a + b;
}

export function multiply(a, b) {
  return a * b;
}

// Default export
export default class Calculator {
  add(a, b) {
    return a + b;
  }

  subtract(a, b) {
    return a - b;
  }
}
File: app.js

// Import default export
import Calculator from './math.js';

// Import named exports
import { PI, add, multiply } from './math.js';

// Import with alias
import { add as mathAdd } from './math.js';

// Import all exports as a namespace
import * as MathUtils from './math.js';

const calc = new Calculator();
console.log(calc.subtract(10, 5)); // 5

console.log(add(2, 3)); // 5
console.log(mathAdd(4, 5)); // 9
console.log(MathUtils.PI); // 3.14159
console.log(MathUtils.multiply(2, 3)); // 6

🔧 Node.js ES :

আপনি হয় করতে পারেন:

  • ব্যাচ ফাইলের জন্য .mjs এক্সটেনশন ব্যবহার করুন
  • আপনার package.json এ "টাইপ": "মডিউল" যোগ করুন
  • --পরীক্ষামূলক-মডিউল পতাকা ব্যবহার করুন (পুরনো Node.js সংস্করণ)

CommonJS মডিউল সিস্টেম (require() এবং module.exports) এখনও Node.js-এ ব্যাপকভাবে ব্যবহৃত হয়। ES মডিউল এবং CommonJS একই প্রকল্পে সহাবস্থান করতে পারে, কিন্তু তাদের আলাদা শব্দার্থ আছে।

উন্নত বস্তু আক্ষরিক

ES6+ অবজেক্ট লিটারেলে বেশ কিছু উন্নতি প্রবর্তন করেছে যা অবজেক্ট তৈরিকে আরও সংক্ষিপ্ত এবং স্বচ্ছ করে তোলে।

উদাহরণ: উন্নত বস্তুর আক্ষরিক

// Property shorthand
const name = 'Alice';
const age = 30;

// Instead of {name: name, age: age}
const person = { name, age };
console.log(person);

// Method shorthand
const calculator = {
  // Instead of add: function(a, b) { ... }
  add(a, b) {
    return a + b;
  },
  subtract(a, b) {
    return a - b;
  }
};
console.log(calculator.add(5, 3));

ঐচ্ছিক চ্যানেলিং এবং নালিশ কোলেসিং

আধুনিক জাভাস্ক্রিপ্ট নিরাপদে নেস্টেড বৈশিষ্ট্যগুলি অ্যাক্সেস করতে এবং নেস্টেড মানগুলি ফেরত দেওয়ার জন্য সিনট্যাক্স প্রবর্তন করে।

ঐচ্ছিক চ্যানেলিং (?।)

ঐচ্ছিক চ্যানেলিং চেইনে নাল বা অনির্ধারিত মান সম্পর্কে চিন্তা না করেই আপনাকে গভীরভাবে নেস্টেড অবজেক্টের বৈশিষ্ট্যগুলি অ্যাক্সেস করার অনুমতি দেয়।

উদাহরণ: অগ্রাধিকারমূলক চ্যানেলিং

function getUserCity(user) {
  return user?.address?.city;
}

const user1 = {
  name: 'Alice',
  address: { city: 'New York', country: 'USA' }
};

const user2 = {
  name: 'Bob'
};

const user3 = null;

console.log(getUserCity(user1)); // 'New York'
console.log(getUserCity(user2)); // undefined
console.log(getUserCity(user3)); // undefined

নালিশ কোলেসিং (??)

নাল কোলেসিং অপারেটর (??) একটি ডিফল্ট মান প্রদান করে যখন একটি মান নাল বা অনির্ধারিত হয় (কিন্তু অন্যান্য মিথ্যা মান যেমন 0 বা "" এর জন্য নয়)।

উদাহরণ: নালিশ কোলেসিং

function calculatePrice(price, tax) {
  // Only uses default if tax is null or undefined
  return price + (tax ?? 0.1) * price;
}

console.log(calculatePrice(100, 0)); // 100 (correct! tax of 0 was used)
console.log(calculatePrice(100, null)); // 110 (using default)

আধুনিক অ্যাসিঙ্ক্রোনাস নিদর্শন

আধুনিক জাভাস্ক্রিপ্ট অ্যাসিঙ্ক্রোনাস অপারেশন পরিচালনার জন্য শক্তিশালী প্যাটার্ন প্রদান করে। অনুক্রমিক এবং সমান্তরাল অপারেশন কখন ব্যবহার করতে হবে তা বোঝা আপনার অ্যাপ্লিকেশনের কার্যকারিতা উল্লেখযোগ্যভাবে উন্নত করতে পারে।

ক্রমাগত এবং সমান্তরাল অপারেশন:

উদাহরণ: ক্রমাগত ফাংশন

// Helper function to simulate an API call
function fetchData(id) {
  return new Promise(resolve => {
    setTimeout(() => resolve(`Data for ID ${id}`), 1000);
  });
}

// Sequential execution (~3 seconds total)
async function fetchSequential() {
  console.time('sequential');
  const data1 = await fetchData(1);
  const data2 = await fetchData(2);
  const data3 = await fetchData(3);
  console.timeEnd('sequential');
  return [data1, data2, data3];
}

// Run the sequential example
fetchSequential().then(results => {
  console.log('Sequential results:', results);
});

উদাহরণ: সমান্তরাল অপারেশন

// Parallel execution (~1 second total)
async function fetchParallel() {
  console.time('parallel');
  const results = await Promise.all([
    fetchData(1),
    fetchData(2),
    fetchData(3)
  ]);
  console.timeEnd('parallel');
  return results;
}

// Run the parallel example
fetchParallel().then(results => {
  console.log('Parallel results:', results);
});

🚀প্রতিটি প্যাটার্ন কখন ব্যবহার করবেন:

  • ক্রমাগত ব্যবহার করুন:যখন কার্যক্রম পূর্ববর্তী সিদ্ধান্তের উপর নির্ভর করে
  • সমান্তরালতা ব্যবহার করুন:যখন ফাংশন স্বাধীন হয় এবং একই সাথে কার্যকর করা যায়
  • সমান্তরাল API কল করার সময় রেট সীমা সম্পর্কে সচেতন থাকুন
  • নিয়ন্ত্রিত সমান্তরাল প্রক্রিয়াকরণের জন্য p-queue এর মত লাইব্রেরি ব্যবহার করুন

সারাংশ

ES6+ বেশ কিছু বৈশিষ্ট্য চালু করেছে যা কোডকে আরও পঠনযোগ্য, রক্ষণাবেক্ষণযোগ্য এবং শক্তিশালী করে তোলে:

let/const

স্পষ্ট শব্দার্থবিদ্যা সহ মডিউল-ভিত্তিক ভেরিয়েবল

তীর ফাংশন

এই বাঁধনের জন্য একটি সংক্ষিপ্ত বাক্য গঠন এবং শব্দভাণ্ডার

টেমপ্লেট আক্ষরিক

স্ট্রিং ইন্টারপোলেশন এবং মাল্টি-লাইন স্ট্রিং

ধ্বংস করা

বস্তু এবং অ্যারে থেকে সহজেই মান বের করুন

স্প্রেড/বিশ্রাম অপারেটর

প্যাকেজগুলির সাথে দক্ষতার সাথে কাজ করুন

ডিফল্ট পরামিতি

সহজ ফাংশন সংজ্ঞা

ক্লাস

অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের জন্য একটি পরিষ্কার বাক্য গঠন

প্রতিশ্রুতি এবং অ্যাসিঙ্ক/অপেক্ষা

আরও ভাল অ্যাসিঙ্ক্রোনাস কোড পরিচালনা

ES মডিউল

প্রমিত কোড কাঠামো

উন্নত বস্তু আক্ষরিক

খুব সংক্ষিপ্ত বস্তু সিনট্যাক্স

পছন্দের চ্যানেলিং এবং নালিশ সমন্বিত

নিরাপদ সম্পদ অ্যাক্সেস এবং ডিফল্ট

এই আধুনিক বৈশিষ্ট্যগুলি বর্তমান Node.js সংস্করণগুলিতে সম্পূর্ণরূপে সমর্থিত, যা আপনাকে সাধারণ জাভাস্ক্রিপ্ট ত্রুটিগুলি এড়িয়ে পরিষ্কার, আরও স্বচ্ছ কোড লিখতে দেয়৷

অনুশীলন করুন

সঠিক ES6 কীওয়ার্ড টেনে আনুন।

🔤 ______কীওয়ার্ডটি এমন ভেরিয়েবল তৈরি করে যা পুনরায় বরাদ্দ করা যায় না।

let
✗ ভুল! "লেট" পুনরায় বরাদ্দযোগ্য ভেরিয়েবল তৈরি করে
const
✓ ঠিক আছে! "const" কীওয়ার্ডটি এমন ভেরিয়েবল তৈরি করে যা পুনরায় বরাদ্দ করা যায় না
var
✗ ভুল! "var" ES6 নয় এবং এটি পুনরায় বরাদ্দযোগ্য ভেরিয়েবল তৈরি করে
static
✗ ভুল! "static" একটি কীওয়ার্ড নয় এবং জাভাস্ক্রিপ্টে ভেরিয়েবল ঘোষণা করতে ব্যবহৃত হয় না